"""
创建一个类
1. 创建初始化方法
    1.1 获取配置文件的路径
    1.2 实例化ConfigParser类得到一个对象
    1.3 把指定路径下配置文件的内容读取到对象

2. 定义一个对外方法: 获取某个section的下所有option的值







"""
import configparser, os


# 创建一个类
class ReadConfig:
    # 1. 创建初始化方法
    def __init__(self):
        # 1.1 获取配置文件的路径
        self.path = os.path.dirname(os.path.dirname(__file__)) + "/config.ini"
        # 1.2 实例化ConfigParser类得到一个对象
        self.conf = configparser.ConfigParser()
        # 1.3 把指定路径下配置文件的内容读取到对象
        self.conf.read(self.path, encoding="utf-8")
        print(f"所有section的值:{self.conf.sections()}")

    # # 2. 定义一个对外方法: 获取某个section的下所有option的值
    # def get_all_options(self,s):
    #     # res = self.conf.options(s)
    #     res = self.conf.items(s)
    #     return res
    #
    # # 3. 定义一个对外方法:获取某个section下面某个option的值
    # def get_one_option(self,s,o):
    #     res = self.conf.get(s,o)
    #     return res

    # 定义一个对外方法:get_config()
    # 方式一:默认参数的思路
    # def get_config(self, s, o="all"):
    #     """
    #     如果接收了一个参数是section,则返回这个section下所有option的键值对
    #     如果接收了两个参数是section,则返回这个section下指定option的value
    #     :return:
    #     """
    #     if o == "all":
    #         res = self.conf.items(s)
    #         return res
    #     else:
    #         res = self.conf.get(s, o)
    #         return res
    # 方式二: 不定长传参
    def get_config(self, *args):
        """
        如果接收了一个参数是section,则返回这个section下所有option的键值对
        如果接收了两个参数是section,则返回这个section下指定option的value
        :return:
        """
        if len(args) == 1:
            res = self.conf.items(args[0])
            return res
        elif len(args) == 2:
            res = self.conf.get(args[0], args[1])
            return res
        else:
            print("参数个数不对")


if __name__ == '__main__':
    rc = ReadConfig()
    # print(rc.get_all_options("redis"))
    # print(rc.get_one_option("redis","port"))
    print(rc.get_config("redis"))
    print(rc.get_config("redis", "port"))
